﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using FluentValidation;

using Revis.VClinicNet.App.Internal.Dto.Validation.Fluent;

namespace Revis.VClinicNet.App.Internal.Dto.Validation
{
    public class PatientCreateDtoRules : ValidationRules<PatientCreateDto>
    {
        public override void SetUpRules()
        {
            RuleFor(p => p.Personal).SetValidator(new PersonalDataDtoRule());
        }
    }

    public class PatientEditDtoRules : ValidationRules<PatientEditDto>
    {
        public override void SetUpRules()
        {
            RuleFor(p => p.Personal).SetValidator(new PersonalDataDtoRule());
        }
    }

    public class PersonalDataDtoRule : ValidationRules<PersonalDataDto>
    {
        public override void SetUpRules()
        {
            RuleFor(p => p.FirstName)
                .RequireWithMessage("Imię nie może być puste");
            RuleFor(p => p.Surname)
                .RequireWithMessage("Nazwisko nie może być puste");
            RuleFor(p => p.Pesel)
                .RequireWithMessage("Pesel nie może być pusty");
            RuleFor(p => p.Address).SetValidator(new AddressDtoRule());
        }
    }

    public class AddressDtoRule : ValidationRules<AddressDto>
    {
        public override void SetUpRules()
        {
            RuleFor(a=>a.StreetName)
                .RequireWithMessage("Nazwa ulicy nie może być pusta");
            RuleFor(a => a.HomeNumber)
                .RequireWithMessage("Nr domu nie może być pusty");
            RuleFor(a => a.PostalCode)
                .RequireWithMessage("Kod pocztowy nie może być pusty")
                .Matches(@"\d{2}-\d{3}").WithMessage("Niepoprawny format kodu pocztowego (XX-XXX)");
            RuleFor(a => a.City)
                .RequireWithMessage("Nazwa miasta nie może być pusta");
            RuleFor(a => a.Municipality)
                .RequireWithMessage("Nazwa wojewódźtwa nie może być pusta");
            RuleFor(a => a.Telephone)
                .RequireWithMessage("Nr telefonu nie może być pusty");
        }
    }
}
